#include <QString>
#include <QFile>
#include <QTextStream>

#include <stdio.h>

#include <opencv/cv.h>
#include <opencv/highgui.h>

#ifndef QCVGRAPH_H
#define QCVGRAPH_H

#define INF 1.0/0.0

class QCVGraph
{
	public:
		
		//Charge le graph depuis un fichier
		void read(QString filename);

		//Charge le graph depuis des données
		void read(cv::Mat_<float> & adjMat);
		
		//Fonctions d'affichage dans la sortie standard
		void stdPrint();
		void stdPrintPath(int src,int des);
		
		//Fonction de recherche du plus court chemein entre deux noeuds
		void path(int src,int des,std::vector<int> & p);
		void path(int src,int des,std::vector<int> & p,float * dist);	
		float dist(int src,int des);
		
		//Retourne la matrice des coûts minimums par paires de noeud
		void getCostMat(cv::Mat_<float> & costMat);


	private:
		cv::Mat_<float> adjMatrix;
		cv::Mat_<int> predecessor;
		cv::Mat_<float> distances;
		cv::Mat_<bool> mark;
		int source;
		int numOfVertices;

		void setSource(int src);
		void initialize(int src);
		int getClosestUnmarkedNode();
		void dijkstra();
		void stdPath(int);
		void recPath(int des,std::vector<int> & p);
};

#endif
